From 4eb077979f931f68dc20299ee1640e020df6707b Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 15 Oct 2019 16:30:46 +0200 Subject: [PATCH] widget: Don't grab focus when can-focus == false ... inside the default vfunc. Instead, walk the children until we find the first widget that can be focused. If no child can be focused, return FALSE from grab_focus. --- gtk/gtkwidget.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index c3e0e288d2..0b8e4a07e2 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -5436,9 +5436,23 @@ static gboolean gtk_widget_real_grab_focus (GtkWidget *focus_widget) { GtkWidgetPrivate *priv = gtk_widget_get_instance_private (focus_widget); + GtkWidget *child; - gtk_root_set_focus (priv->root, focus_widget); - return TRUE; + if (priv->can_focus) + { + gtk_root_set_focus (priv->root, focus_widget); + return TRUE; + } + + for (child = _gtk_widget_get_first_child (focus_widget); + child != NULL; + child = _gtk_widget_get_next_sibling (child)) + { + if (gtk_widget_grab_focus (child)) + return TRUE; + } + + return FALSE; } static gboolean -- 2.30.2